@@ -130,4 +130,5 @@ public static final int *; |
||
130 | 130 |
-keepclassmembers class * { |
131 | 131 |
public java.lang.Object accessSuper(java.lang.Object,int,java.lang.Object[]); |
132 | 132 |
} |
133 |
--keep class com.android.hotpatch.**{*;} |
|
133 |
+-keep class com.android.hotpatch.**{*;} |
|
134 |
+-keep class ai.pai.ai.patch.**{*;} |
@@ -33,7 +33,7 @@ public class PaiAiApplication extends Application { |
||
33 | 33 |
PlatformConfig.setSinaWeibo("2730190333","ff16591583c7bcf4a0d781eae316635a"); |
34 | 34 |
PhotoLoader.getInstance(this); |
35 | 35 |
checkAppDir(); |
36 |
-// new PatchManager().patch(this, UrlContainer.PATCH_CONFIG_URL,Constants.APP_PATCH_DIR+File.separator+"patch.dex",""); |
|
36 |
+ new PatchManager().patch(this, UrlContainer.PATCH_CONFIG_URL,Constants.APP_PATCH_DIR+File.separator+"patch.dex",""); |
|
37 | 37 |
} |
38 | 38 |
|
39 | 39 |
private void checkAppDir(){ |
@@ -133,12 +133,12 @@ public class Preferences { |
||
133 | 133 |
mPrefs.edit().putBoolean("isPermissionGranted",isPermissionGranted).commit(); |
134 | 134 |
} |
135 | 135 |
|
136 |
- public void setPatchMD5(String md5){ |
|
137 |
- mPrefs.edit().putString("md5",md5).commit(); |
|
136 |
+ public void setPatchUrl(String patchUrl){ |
|
137 |
+ mPrefs.edit().putString("patchUrl",patchUrl).commit(); |
|
138 | 138 |
} |
139 | 139 |
|
140 |
- public String getPatchMD5(){ |
|
141 |
- return mPrefs.getString("md5",NullStr); |
|
140 |
+ public String getPatchUrl(){ |
|
141 |
+ return mPrefs.getString("patchUrl",NullStr); |
|
142 | 142 |
} |
143 | 143 |
|
144 | 144 |
public void clearPrefs(){ |
@@ -0,0 +1,58 @@ |
||
1 |
+package ai.pai.client.patch; |
|
2 |
+ |
|
3 |
+import android.os.Bundle; |
|
4 |
+import android.view.View; |
|
5 |
+import android.widget.TextView; |
|
6 |
+ |
|
7 |
+import com.android.hotpatch.framework.ChangeQuickRedirect; |
|
8 |
+import com.android.hotpatch.utils.PatchUtils; |
|
9 |
+ |
|
10 |
+import ai.pai.client.R; |
|
11 |
+import ai.pai.client.activity.AboutUsActivity; |
|
12 |
+import ai.pai.client.utils.SystemUtils; |
|
13 |
+ |
|
14 |
+ |
|
15 |
+public class AboutUsActivity$Override implements ChangeQuickRedirect { |
|
16 |
+ @Override |
|
17 |
+ public boolean isSupport(String s, Object[] objects) { |
|
18 |
+ String methodName = s.split(":")[1]; |
|
19 |
+ if(methodName.equals("onCreate")){ |
|
20 |
+ return true; |
|
21 |
+ } |
|
22 |
+ return false; |
|
23 |
+ } |
|
24 |
+ |
|
25 |
+ @Override |
|
26 |
+ public Object accessDispatch(String s, Object[] objects) { |
|
27 |
+ String methodName = s.split(":")[1]; |
|
28 |
+ if(methodName.equals("onCreate")){ |
|
29 |
+ onCreate((AboutUsActivity)objects[objects.length-1],(Bundle)objects[0]); |
|
30 |
+ } |
|
31 |
+ return null; |
|
32 |
+ } |
|
33 |
+ |
|
34 |
+ |
|
35 |
+ protected void onCreate(AboutUsActivity $this,Bundle savedInstanceState) { |
|
36 |
+ try{ |
|
37 |
+ PatchUtils.invokeProtectedMethod($this,new Object[]{$this,-641568046,new Object[]{savedInstanceState}},new Class[]{Object.class,int.class,Object[].class},"accessSuper"); |
|
38 |
+ }catch (Throwable t){ |
|
39 |
+ t.printStackTrace(); |
|
40 |
+ } |
|
41 |
+ $this.setContentView(R.layout.activity_about_us); |
|
42 |
+ SystemUtils.setImmerseLayout($this,$this.findViewById(R.id.title_layout)); |
|
43 |
+ TextView title = (TextView) $this.findViewById(R.id.title_bar_middle_txt); |
|
44 |
+ title.setTextSize(25); |
|
45 |
+ title.setText(R.string.slide_about_us); |
|
46 |
+ TextView curVersionText = (TextView)$this.findViewById(R.id.tv_cur_version); |
|
47 |
+ try { |
|
48 |
+ curVersionText.setText( "v"+$this.getPackageManager().getPackageInfo($this.getPackageName(), 0).versionName); |
|
49 |
+ }catch (Exception e){ |
|
50 |
+ e.printStackTrace(); |
|
51 |
+ } |
|
52 |
+ $this.findViewById(R.id.title_bar_back_layout).setOnClickListener($this); |
|
53 |
+ $this.findViewById(R.id.title_bar_option_layout).setVisibility(View.INVISIBLE); |
|
54 |
+ $this.findViewById(R.id.layout_about_declare).setOnClickListener($this); |
|
55 |
+ $this.findViewById(R.id.layout_check_update).setOnClickListener($this); |
|
56 |
+ $this.findViewById(R.id.layout_contact_us).setOnClickListener($this); |
|
57 |
+ } |
|
58 |
+} |
@@ -0,0 +1,19 @@ |
||
1 |
+package ai.pai.client.patch; |
|
2 |
+ |
|
3 |
+import com.android.hotpatch.framework.PatchedClassInfo; |
|
4 |
+import com.android.hotpatch.framework.PatchesInfo; |
|
5 |
+ |
|
6 |
+import java.util.ArrayList; |
|
7 |
+import java.util.List; |
|
8 |
+ |
|
9 |
+ |
|
10 |
+public class PatchesInfoImpl implements PatchesInfo { |
|
11 |
+ public List<PatchedClassInfo> getPatchedClassesInfo() { |
|
12 |
+ List<PatchedClassInfo> patchedClassesInfos = new ArrayList<PatchedClassInfo>(); |
|
13 |
+ PatchedClassInfo patchedClass = new PatchedClassInfo( |
|
14 |
+ "ai.pai.client.activity.AboutUsActivity", |
|
15 |
+ AboutUsActivity$Override.class.getCanonicalName()); |
|
16 |
+ patchedClassesInfos.add(patchedClass); |
|
17 |
+ return patchedClassesInfos; |
|
18 |
+ } |
|
19 |
+} |
@@ -7,12 +7,14 @@ import com.android.hotpatch.utils.IPatchManager; |
||
7 | 7 |
import org.json.JSONObject; |
8 | 8 |
|
9 | 9 |
import java.io.File; |
10 |
+import java.util.HashMap; |
|
10 | 11 |
|
12 |
+import ai.pai.client.BuildConfig; |
|
11 | 13 |
import ai.pai.client.db.Preferences; |
12 | 14 |
|
13 | 15 |
public class PatchManager extends IPatchManager{ |
14 | 16 |
|
15 |
- private String md5; |
|
17 |
+ private String patchUrl; |
|
16 | 18 |
|
17 | 19 |
public PatchManager(){ |
18 | 20 |
new File(Constants.APP_PATCH_DIR).mkdirs(); |
@@ -20,11 +22,21 @@ public class PatchManager extends IPatchManager{ |
||
20 | 22 |
|
21 | 23 |
@Override |
22 | 24 |
protected String getPatchFileDownloadUrl(String patchConfigUrl) { |
23 |
- String jsonStr = HttpUtils.doHttpPost(patchConfigUrl,null); |
|
25 |
+ if(patchConfigUrl.contains("?")){ |
|
26 |
+ patchConfigUrl+="&platform=android"; |
|
27 |
+ }else{ |
|
28 |
+ patchConfigUrl+="?platform=android"; |
|
29 |
+ } |
|
30 |
+ patchConfigUrl+="&version="+ BuildConfig.VERSION_NAME; |
|
31 |
+ patchConfigUrl+="&channel="+"guanwang"; |
|
32 |
+ HashMap<String,String> httpParams = new HashMap<>(); |
|
33 |
+ httpParams.put("src","0"); |
|
34 |
+ String jsonStr = HttpUtils.doHttpPost(patchConfigUrl,httpParams); |
|
24 | 35 |
try{ |
25 | 36 |
JSONObject response = new JSONObject(jsonStr); |
26 |
- md5 = response.getString("md5"); |
|
27 |
- return response.getString("patch_url"); |
|
37 |
+ JSONObject data = response.getJSONObject("data"); |
|
38 |
+ patchUrl = data.getString("patch_url"); |
|
39 |
+ return patchUrl; |
|
28 | 40 |
}catch (Exception e){ |
29 | 41 |
e.printStackTrace(); |
30 | 42 |
} |
@@ -33,7 +45,7 @@ public class PatchManager extends IPatchManager{ |
||
33 | 45 |
|
34 | 46 |
@Override |
35 | 47 |
protected boolean isNewPatchFound() { |
36 |
- if(!Preferences.getInstance(context).getPatchMD5().equals(md5)){ |
|
48 |
+ if(!Preferences.getInstance(context).getPatchUrl().equals(patchUrl)){ |
|
37 | 49 |
return true; |
38 | 50 |
} |
39 | 51 |
if(!new File(patchSavePath).exists()){ |
@@ -44,6 +56,6 @@ public class PatchManager extends IPatchManager{ |
||
44 | 56 |
|
45 | 57 |
@Override |
46 | 58 |
protected void afterPatchSuccess() { |
47 |
- Preferences.getInstance(context).setPatchMD5(md5); |
|
59 |
+ Preferences.getInstance(context).setPatchUrl(patchUrl); |
|
48 | 60 |
} |
49 | 61 |
} |
@@ -86,5 +86,5 @@ public class UrlContainer { |
||
86 | 86 |
|
87 | 87 |
public static final String TOUR_INFO_URL = HOST_URL +"pai2/tginfo"; |
88 | 88 |
|
89 |
- public static final String PATCH_CONFIG_URL = HOST_URL+"patch"; |
|
89 |
+ public static final String PATCH_CONFIG_URL = HOST_URL+"op/patch"; |
|
90 | 90 |
} |